@@ -26,6 +26,7 @@ module Agents |
||
26 | 26 |
For example, "post,get" will enable POST and GET requests. Defaults |
27 | 27 |
to "post". |
28 | 28 |
* `response` - The response message to the request. Defaults to 'Event Created'. |
29 |
+ * `code` - The response code to the request. Defaults to '201'. |
|
29 | 30 |
* `recaptcha_secret` - Setting this to a reCAPTCHA "secret" key makes your agent verify incoming requests with reCAPTCHA. Don't forget to embed a reCAPTCHA snippet including your "site" key in the originating form(s). |
30 | 31 |
* `recaptcha_send_remote_addr` - Set this to true if your server is properly configured to set REMOTE_ADDR to the IP address of each visitor (instead of that of a proxy server). |
31 | 32 |
MD |
@@ -53,6 +54,9 @@ module Agents |
||
53 | 54 |
# check the verbs |
54 | 55 |
verbs = (interpolated['verbs'] || 'post').split(/,/).map { |x| x.strip.downcase }.select { |x| x.present? } |
55 | 56 |
return ["Please use #{verbs.join('/').upcase} requests only", 401] unless verbs.include?(method) |
57 |
+ |
|
58 |
+ # check the code |
|
59 |
+ code = (interpolated['code'].presence || 201).to_i |
|
56 | 60 |
|
57 | 61 |
# check the reCAPTCHA response if required |
58 | 62 |
if recaptcha_secret = interpolated['recaptcha_secret'].presence |
@@ -84,7 +88,7 @@ module Agents |
||
84 | 88 |
create_event(payload: payload) |
85 | 89 |
end |
86 | 90 |
|
87 |
- [response_message, 201] |
|
91 |
+ [response_message, code] |
|
88 | 92 |
end |
89 | 93 |
|
90 | 94 |
def working? |
@@ -95,6 +99,10 @@ module Agents |
||
95 | 99 |
unless options['secret'].present? |
96 | 100 |
errors.add(:base, "Must specify a secret for 'Authenticating' requests") |
97 | 101 |
end |
102 |
+ |
|
103 |
+ if options['code'].present? && options['code'].to_s !~ /\A\s*(\d+|\{.*)\s*\z/ |
|
104 |
+ errors.add(:base, "Must specify a code for request responses") |
|
105 |
+ end |
|
98 | 106 |
end |
99 | 107 |
|
100 | 108 |
def payload_for(params) |
@@ -59,6 +59,26 @@ describe Agents::WebhookAgent do |
||
59 | 59 |
expect(out).to eq(['Event Created', 201]) |
60 | 60 |
end |
61 | 61 |
|
62 |
+ it 'should respond with customized response code if configured with `code` option' do |
|
63 |
+ agent.options['code'] = '200' |
|
64 |
+ out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "post", "text/html") |
|
65 |
+ expect(out).to eq(['Event Created', 200]) |
|
66 |
+ end |
|
67 |
+ |
|
68 |
+ it 'should respond with `201` if the code option is empty, nil or missing' do |
|
69 |
+ agent.options['code'] = '' |
|
70 |
+ out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "post", "text/html") |
|
71 |
+ expect(out).to eq(['Event Created', 201]) |
|
72 |
+ |
|
73 |
+ agent.options['code'] = nil |
|
74 |
+ out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "post", "text/html") |
|
75 |
+ expect(out).to eq(['Event Created', 201]) |
|
76 |
+ |
|
77 |
+ agent.options.delete('code') |
|
78 |
+ out = agent.receive_web_request({ 'secret' => 'foobar', 'some_key' => payload }, "post", "text/html") |
|
79 |
+ expect(out).to eq(['Event Created', 201]) |
|
80 |
+ end |
|
81 |
+ |
|
62 | 82 |
describe "receiving events" do |
63 | 83 |
|
64 | 84 |
context "default settings" do |